﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using middleware.utiles;
using System.IO;
using System.Xml;
using System.Windows.Forms;

namespace middleware.entradaTxt
{
    class BandejaEntradaTxt : ITipoBandejaEntrada
    {
        private string ruta = "";

        private const string NOMBRE_BANDEJA = "BandejaEntradaTXT";

        public int ElementosSinLeer()
        {
            int result = 0;
            if (!String.IsNullOrEmpty(ruta))
            {
                if (Directory.Exists(ruta))
                {
                    string[] listaTxts = Directory.GetFiles(ruta, "*.txt", SearchOption.TopDirectoryOnly);

                    if (listaTxts != null)
                    {
                        result = listaTxts.Length;
                    }
                    else
                    {
                        result = 0;
                    }
                }
            }
            return result;
        }

        public Mensaje ObtenerMensaje()
        {
            Mensaje result = null;
            if (!String.IsNullOrEmpty(ruta))
            {
                if (Directory.Exists(ruta))
                {
                    string[] listaFicheros = Directory.GetFiles(ruta, "*.txt", SearchOption.TopDirectoryOnly);
                    if (listaFicheros != null && listaFicheros.Length > 0)
                    {
                        result = CargarMensaje(result, listaFicheros[0]);
                    }
                }
            }
            return result;
        }

        private Mensaje CargarMensaje(Mensaje result, string txtFilePath)
        {
            result = new Mensaje();
            TextReader tr = new StreamReader(txtFilePath);

            string valorTxt = tr.ReadLine();
            
            if (!valorTxt.Equals("")) 
            {
                result.fecha = System.DateTime.Now;
                string titulo = valorTxt;
                result.titulo = titulo;

                valorTxt = tr.ReadLine();
                while (valorTxt != null && !valorTxt.Equals(""))
                {
                    Atributo atributo = new Atributo();                    
                    char [] delimitadores = {';'};
                    string [] valores = valorTxt.Split(delimitadores);                    
                    string nombre = valores[0];
                    string tipo = valores[1];
                    string valor = valores[2];
                    atributo.nombre = nombre;
                    atributo.tipo = tipo;
                    atributo.valor = valor;
                    result.atributos.Add(atributo);
                    valorTxt = tr.ReadLine();
                }
            }
            //close the stream
            tr.Close();
            return result;
        }

        public void MarcarComoLeido(Mensaje mensaje)
        {
            Mensaje msjComparar = null;
            if (!String.IsNullOrEmpty(ruta))
            {
                if (Directory.Exists(ruta))
                {
                    string[] listaTxts = Directory.GetFiles(ruta, "*.txt", SearchOption.TopDirectoryOnly);
                    if (listaTxts != null && listaTxts.Length > 0)
                    {
                        for (int i = 0; i < listaTxts.Length; i++)
                        {
                            msjComparar = CargarMensaje(msjComparar, listaTxts[i]);
                            if (mensaje.Equals(msjComparar))
                            {
                                File.Delete(listaTxts[i]);
                            }
                        }
                    }
                }
            }
        }

        public string getConfiguracion() 
        {
            return ruta;
        }

        public void setConfiguracion(string c) 
        {
            ruta = c;
        }

        override
        public string ToString()
        {
            return NOMBRE_BANDEJA;
        }

        public UserControl getVentanaConfiguracion()
        {
            VentanaConfiguracion aRetornar = new VentanaConfiguracion();
            return aRetornar;
        }

        //Procedimiento que recibe una instancia del usercontrol "VentanaConfiguracion"
        //y retorna la configuracion
        public string getConfiguracionFormulario(UserControl uc)
        {
            string aRetornar;
            VentanaConfiguracion uc2 = (VentanaConfiguracion)uc;
            aRetornar = uc2.getConfiguracion();
            return aRetornar;
        }

        public void setConfiguracionFormulario(UserControl uc, string conf)
        {
            VentanaConfiguracion ventana = (VentanaConfiguracion)uc;
            ventana.setConfiguracion(conf);
        }
    }
}
